package test.core;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * 使用特定的构造器实例化对象
 */
public class ReflectDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Person p = new Person("刘苍松",55);
        System.out.println(p);

        //1获取类对象
        Class cls = Class.forName("test.core.Person");
        /*
            2
            java中常见的反射对象:
            java.lang.reflect.Constructor构造器对象，它的每一个实例用于表示某个类中的某个特定构造器
            java.lang.reflect.Method方法对象，它的每一个实例用于表示某个类中的某个特定方法
         */
        //获取构造器时指定的参数列表中的参数要与实际构造方法定义时参数的个数，类型，顺序完全一致
        Constructor c = cls.getConstructor(String.class,int.class);//获取Person(String,int)
        //实例化时传入的实参也要与构造器定义时的类型，个数，顺序完全一致
        Object o = c.newInstance("王克晶",18);//new Person("王克晶",18)
        System.out.println(o);

    }
}






